package coml.allen.api.quickstart;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * @author sesshomaru
 * @date 2020/11/12 22:36
 */
public class Producer {

    public static void main(String[] args) throws Exception {
        ConnectionFactory connectionFactory = new ConnectionFactory();

        connectionFactory.setHost("192.168.1.102");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");

        Connection connection = connectionFactory.newConnection();
        Channel channel = connection.createChannel();

        String msg = "hello rabbitmq!";
        Map<String, Object> header = new HashMap<>();
        header.put("my1","1111");

        // 定义消息配置
        AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
                // 如果设置的是2，就算是服务重启这个消息也会存在，如果是1就不是持久化的消息,重启就会没
                .deliveryMode(2)
                .contentEncoding("UTF-8")
                // 过期时间, 到了消息时间这个消息会被MQ清除，如果配置了死信队列就会进入死信
                .expiration("10000")
                // 这里还可以添加个性化的属性
                .headers(header)
                .build();

        // 发送数据
        for (int i = 0; i < 5; i++) {
            /**
             * String exchange,   交换机
             * String routingKey,  路由key 如果没指定交换那么就是相当于直接投递到了test001队列上，它会走rabbit默认的交换机
             * BasicProperties props, 配置
             * byte[] body  消息
              */
            channel.basicPublish("", "test001", properties, msg.getBytes());
        }

        // 关闭连接
        channel.close();
        connection.close();
    }
}
